Academy

ইনহেরিটেন্স এবং পলিমরফিজম

Microsoft Technologies - সি শার্প (C#) - NCTB BOOK

সি শার্প (C#) প্রোগ্রামিংয়ের দুটি গুরুত্বপূর্ণ ধারণা হলো ইনহেরিটেন্স এবং পলিমরফিজম। ইনহেরিটেন্সের মাধ্যমে কোডের পুনরায় ব্যবহারযোগ্যতা বৃদ্ধি করা যায়, আর পলিমরফিজম একই ফাংশনের বিভিন্ন রূপ প্রকাশ করতে সহায়ক। এই দুটি ধারণা অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর ভিত্তি গঠন করে।

ইনহেরিটেন্স (Inheritance)

ইনহেরিটেন্স হলো এমন একটি প্রক্রিয়া, যার মাধ্যমে একটি ক্লাস অন্য একটি ক্লাসের বৈশিষ্ট্য এবং মেথড উত্তরাধিকারী হিসেবে পায়। ইনহেরিটেন্সের মাধ্যমে ক্লাসের মধ্যে সম্পর্ক তৈরি করা হয়, এবং একবার কোনো বেস (parent) ক্লাসে বৈশিষ্ট্য সংজ্ঞায়িত করলে তা ডেরাইভড (child) ক্লাসে পুনরায় ব্যবহার করা যায়।

উদাহরণ: ইনহেরিটেন্স

// বেস ক্লাস
public class Animal
{
    public void Eat()
    {
        Console.WriteLine("Eating...");
    }
}

// ডেরাইভড ক্লাস
public class Dog : Animal
{
    public void Bark()
    {
        Console.WriteLine("Barking...");
    }
}

এখানে, Dog ক্লাস Animal ক্লাস থেকে ইনহেরিট করেছে, যার ফলে Dog ক্লাসে Eat() মেথড এবং Bark() মেথড উভয়ই অ্যাক্সেসযোগ্য।

উদাহরণ প্রোগ্রাম: ইনহেরিটেন্সের ব্যবহার

class Program
{
    static void Main(string[] args)
    {
        Dog dog = new Dog();
        dog.Eat();  // Output: Eating...
        dog.Bark(); // Output: Barking...
    }
}

ইনহেরিটেন্সের সুবিধা

  1. কোড পুনরায় ব্যবহারযোগ্যতা: একই কোড বেস ক্লাসে সংজ্ঞায়িত করে বিভিন্ন ডেরাইভড ক্লাসে পুনরায় ব্যবহার করা যায়।
  2. সহজে সম্প্রসারণযোগ্যতা: নতুন বৈশিষ্ট্য যোগ করতে ডেরাইভড ক্লাস তৈরি করা যায়।
  3. সম্পর্ক তৈরি: ইনহেরিটেন্সের মাধ্যমে বেস এবং ডেরাইভড ক্লাসের মধ্যে সম্পর্ক তৈরি হয়, যা কোডকে আরও সরল ও গঠনমূলক করে।

পলিমরফিজম (Polymorphism)

পলিমরফিজম হলো এমন একটি প্রক্রিয়া যার মাধ্যমে একই মেথড বা অপারেশনের বিভিন্ন রূপ প্রকাশ করা সম্ভব হয়। পলিমরফিজমের মাধ্যমে প্রোগ্রামিং আরও শক্তিশালী ও নমনীয় হয়। এটি মূলত দুটি ধরণের হতে পারে:

  1. স্ট্যাটিক পলিমরফিজম (Static Polymorphism) বা মেথড ওভারলোডিং (Method Overloading)
  2. ডায়নামিক পলিমরফিজম (Dynamic Polymorphism) বা মেথড ওভাররাইডিং (Method Overriding)

স্ট্যাটিক পলিমরফিজম (Method Overloading)

মেথড ওভারলোডিং হলো একই নামের একাধিক মেথড সংজ্ঞায়িত করা, তবে তাদের প্যারামিটারের সংখ্যা বা টাইপ ভিন্ন হয়। এটি কম্পাইল টাইমে কাজ করে, তাই একে স্ট্যাটিক পলিমরফিজমও বলা হয়।

public class MathOperations
{
    public int Add(int a, int b)
    {
        return a + b;
    }

    public double Add(double a, double b)
    {
        return a + b;
    }
}

ডায়নামিক পলিমরফিজম (Method Overriding)

মেথড ওভাররাইডিং হলো বেস ক্লাসের মেথড ডেরাইভড ক্লাসে পুনরায় সংজ্ঞায়িত করা। বেস ক্লাসের মেথড virtual দিয়ে চিহ্নিত করা হয় এবং ডেরাইভড ক্লাসে override কীওয়ার্ড দিয়ে সেটি ওভাররাইড করা হয়। এটি রানটাইমে কাজ করে, তাই একে ডায়নামিক পলিমরফিজম বলা হয়।

উদাহরণ: মেথড ওভাররাইডিং

public class Animal
{
    public virtual void MakeSound()
    {
        Console.WriteLine("Animal makes a sound");
    }
}

public class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Dog barks");
    }
}

উদাহরণ প্রোগ্রাম: পলিমরফিজমের ব্যবহার

class Program
{
    static void Main(string[] args)
    {
        Animal myAnimal = new Animal();
        myAnimal.MakeSound(); // Output: Animal makes a sound

        Animal myDog = new Dog();
        myDog.MakeSound();    // Output: Dog barks
    }
}

ইনহেরিটেন্স এবং পলিমরফিজম একত্রে ব্যবহার

ইনহেরিটেন্স এবং পলিমরফিজম একত্রে ব্যবহার করে কোডের পুনরায় ব্যবহারযোগ্যতা এবং কার্যকারিতা বৃদ্ধি করা যায়। বেস ক্লাসে সাধারণ মেথড এবং প্রোপার্টি সংজ্ঞায়িত করে ডেরাইভড ক্লাসগুলোতে সেই মেথড ওভাররাইড করে বিভিন্ন রূপ প্রকাশ করা সম্ভব।

উদাহরণ: ইনহেরিটেন্স ও পলিমরফিজম একত্রে ব্যবহার

csharp

Copy code

public abstract class Shape
{
    public abstract double GetArea();
}

public class Circle : Shape
{
    private double radius;

    public Circle(double radius)
    {
        this.radius = radius;
    }

    public override double GetArea()
    {
        return Math.PI * radius * radius;
    }
}

public class Rectangle : Shape
{
    private double width;
    private double height;

    public Rectangle(double width, double height)
    {
        this.width = width;
        this.height = height;
    }

    public override double GetArea()
    {
        return width * height;
    }
}

class Program
{
    static void Main(string[] args)
    {
        Shape circle = new Circle(5);
        Shape rectangle = new Rectangle(4, 6);

        Console.WriteLine("Circle Area: " + circle.GetArea());      // Output: Circle Area: 78.54
        Console.WriteLine("Rectangle Area: " + rectangle.GetArea()); // Output: Rectangle Area: 24
    }
}

আউটপুট

Circle Area: 78.54
Rectangle Area: 24

সারসংক্ষেপ

  • ইনহেরিটেন্স: কোডের পুনরায় ব্যবহারযোগ্যতা নিশ্চিত করে এবং ক্লাসের মধ্যে সম্পর্ক তৈরি করে। বেস ক্লাসের বৈশিষ্ট্য এবং মেথড ডেরাইভড ক্লাসে ব্যবহার করা যায়।
  • পলিমরফিজম: প্রোগ্রামে একাধিক রূপে একই ফাংশনালিটি প্রকাশ করতে সহায়ক। এটি স্ট্যাটিক (মেথড ওভারলোডিং) এবং ডায়নামিক (মেথড ওভাররাইডিং) দুইভাবে প্রকাশিত হয়।

ইনহেরিটেন্স এবং পলিমরফিজম একত্রে ব্যবহার করে শক্তিশালী এবং নমনীয় প্রোগ্রামিং কাঠামো তৈরি করা সম্ভব হয়, যা কোডকে আরও কার্যকর এবং গঠনমূলক করে।

Content added By

ইনহেরিটেন্স কী এবং কেন প্রয়োজন

ইনহেরিটেন্স (Inheritance) হলো অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর একটি মূল বৈশিষ্ট্য, যা একটি ক্লাসকে অন্য একটি ক্লাস থেকে বৈশিষ্ট্য এবং আচরণ (ফিল্ড ও মেথড) গ্রহণ করতে সক্ষম করে। ইনহেরিটেন্সের মাধ্যমে একটি ক্লাসের সব ফিচার অন্য একটি ক্লাসে পুনরায় ব্যবহার করা যায়, যা কোডের পুনঃব্যবহারযোগ্যতা, রক্ষণাবেক্ষণ, এবং মডুলারাইজেশন সহজ করে।

ইনহেরিটেন্সের ধারণা

ইনহেরিটেন্সে মূলত দুটি ধরনের ক্লাস থাকে:

  1. বেস ক্লাস (Base Class): এটি মূল ক্লাস বা প্যারেন্ট ক্লাস, যা সাধারণ বৈশিষ্ট্যগুলো ধারণ করে।
  2. ডেরাইভড ক্লাস (Derived Class): এটি চাইল্ড ক্লাস, যা বেস ক্লাস থেকে ইনহেরিট করে এবং প্রয়োজন অনুযায়ী নতুন বৈশিষ্ট্য ও মেথড যোগ করতে পারে।

সি শার্পে ইনহেরিটেন্স ব্যবহার করতে : চিহ্ন দিয়ে ডেরাইভড ক্লাসকে বেস ক্লাস থেকে ইনহেরিট করা হয়।

class বেস_ক্লাস
{
    // ফিল্ড এবং মেথড
}

class ডেরাইভড_ক্লাস : বেস_ক্লাস
{
    // নতুন বৈশিষ্ট্য এবং মেথড যোগ করা যায়
}

উদাহরণ: ইনহেরিটেন্স ব্যবহার

নিচে একটি উদাহরণ দেওয়া হলো যেখানে Animal ক্লাসকে ইনহেরিট করে Dog ক্লাস তৈরি করা হয়েছে।

using System;

// বেস ক্লাস
class Animal
{
    public void Eat()
    {
        Console.WriteLine("Eating...");
    }
}

// ডেরাইভড ক্লাস
class Dog : Animal
{
    public void Bark()
    {
        Console.WriteLine("Barking...");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Dog dog = new Dog();
        dog.Eat();  // বেস ক্লাস Animal থেকে ইনহেরিট করা মেথড
        dog.Bark(); // ডেরাইভড ক্লাস Dog এর নিজস্ব মেথড
    }
}

আউটপুট

Eating...
Barking...

এখানে Dog ক্লাস Animal ক্লাস থেকে ইনহেরিট করেছে। ফলে Dog ক্লাসের অবজেক্ট dog দিয়ে Eat এবং Bark উভয় মেথড কল করা সম্ভব হয়েছে।

কেন ইনহেরিটেন্স প্রয়োজন

ইনহেরিটেন্সের মাধ্যমে প্রোগ্রামে কোডের পুনঃব্যবহারযোগ্যতা এবং দক্ষতা বৃদ্ধি করা যায়। এটি ব্যবহারের কিছু প্রধান কারণ নিচে আলোচনা করা হলো:

কোড পুনঃব্যবহারযোগ্যতা: ইনহেরিটেন্সের মাধ্যমে একবার লেখা কোড পুনরায় ব্যবহার করা যায়, যা কোডের পুনরাবৃত্তি কমায়। উদাহরণস্বরূপ, একটি সাধারণ বৈশিষ্ট্য বা মেথড একাধিক ক্লাসে প্রয়োজন হলে বেস ক্লাসে রেখে তা ইনহেরিট করা যায়।

সহজ রক্ষণাবেক্ষণ: এক জায়গায় পরিবর্তন করলে সব ডেরাইভড ক্লাসে তার প্রভাব পড়ে, ফলে কোড রক্ষণাবেক্ষণ সহজ হয়।

মডুলারাইজেশন: ইনহেরিটেন্সের মাধ্যমে প্রোগ্রামকে ছোট ছোট মডিউলে ভাগ করা যায়, যা প্রোগ্রামিং এবং ডিবাগিং সহজ করে।

ইন্টারফেস ও পলিমরফিজম: ইনহেরিটেন্সের মাধ্যমে পলিমরফিজম (Polymorphism) ব্যবহার করা যায়, যার মাধ্যমে একই ধরনের কাজ বিভিন্ন ভাবে করা সম্ভব হয়।

উদাহরণ: ইনহেরিটেন্স ব্যবহার করে কোড পুনঃব্যবহার

// বেস ক্লাস
class Vehicle
{
    public void StartEngine()
    {
        Console.WriteLine("Engine started.");
    }
}

// ডেরাইভড ক্লাস
class Car : Vehicle
{
    public void Drive()
    {
        Console.WriteLine("Driving...");
    }
}

class Bike : Vehicle
{
    public void Ride()
    {
        Console.WriteLine("Riding...");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Car car = new Car();
        car.StartEngine(); // ইনহেরিট করা মেথড
        car.Drive();       // Car এর নিজস্ব মেথড

        Bike bike = new Bike();
        bike.StartEngine(); // ইনহেরিট করা মেথড
        bike.Ride();        // Bike এর নিজস্ব মেথড
    }
}

আউটপুট

Engine started.
Driving...
Engine started.
Riding...

এখানে Car এবং Bike উভয় ক্লাস Vehicle ক্লাস থেকে StartEngine মেথড ইনহেরিট করেছে, ফলে একই মেথড একাধিকবার না লিখেই ব্যবহার করা সম্ভব হয়েছে।

সারসংক্ষেপ

ইনহেরিটেন্স সি শার্পে একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা কোডের পুনঃব্যবহারযোগ্যতা, মডুলারাইজেশন এবং রক্ষণাবেক্ষণ সহজ করে। ইনহেরিটেন্স ব্যবহার করে কোডকে আরও সংগঠিত ও কার্যকরভাবে সাজানো যায় এবং পলিমরফিজম ও ইন্টারফেসের সুবিধা নেওয়া যায়।

Content added By

বেস এবং ডেরাইভ ক্লাস

সি শার্পে (C#) বেস ক্লাস এবং ডেরাইভড ক্লাস ইনহেরিটেন্সের মাধ্যমে সম্পর্কিত থাকে। বেস ক্লাস হলো মূল ক্লাস, যেখান থেকে ডেরাইভড ক্লাস বৈশিষ্ট্য এবং মেথড উত্তরাধিকারী হিসেবে গ্রহণ করে। ইনহেরিটেন্সের মাধ্যমে বেস ক্লাসের সাধারণ বৈশিষ্ট্যগুলো বিভিন্ন ডেরাইভড ক্লাসে ব্যবহার করা যায়, যা কোড রিইউজ এবং সরলতা নিশ্চিত করে।

বেস ক্লাস (Base Class)

বেস ক্লাস হলো এমন একটি ক্লাস যা ডেরাইভড ক্লাসের জন্য একটি ব্লুপ্রিন্ট হিসেবে কাজ করে। ডেরাইভড ক্লাস ইনহেরিটেন্সের মাধ্যমে বেস ক্লাসের বৈশিষ্ট্য (প্রোপার্টি এবং মেথড) গ্রহণ করতে পারে। বেস ক্লাসকে parent class বা super class ও বলা হয়।

public class Animal
{
    public string Name;

    public void Eat()
    {
        Console.WriteLine("Eating...");
    }
}

উপরের উদাহরণে, Animal হলো বেস ক্লাস, যেখানে Name প্রোপার্টি এবং Eat() মেথড রয়েছে।

ডেরাইভড ক্লাস (Derived Class)

ডেরাইভড ক্লাস হলো এমন একটি ক্লাস, যা বেস ক্লাসের বৈশিষ্ট্য এবং মেথডগুলো ইনহেরিট করে। ডেরাইভড ক্লাসে নতুন বৈশিষ্ট্য এবং মেথডও যুক্ত করা যায়, যা শুধুমাত্র সেই ডেরাইভড ক্লাসের জন্য প্রযোজ্য। ডেরাইভড ক্লাসকে child class বা sub class ও বলা হয়।

ডেরাইভড ক্লাস তৈরি করার জন্য C# এ : চিহ্ন ব্যবহার করে বেস ক্লাসের সাথে সম্পর্ক স্থাপন করা হয়।

public class Dog : Animal
{
    public void Bark()
    {
        Console.WriteLine("Barking...");
    }
}

এখানে Dog হলো ডেরাইভড ক্লাস, যা Animal বেস ক্লাস থেকে ইনহেরিট করেছে। ফলে Dog ক্লাসে Eat() মেথড এবং Name প্রোপার্টি অ্যাক্সেসযোগ্য।

উদাহরণ: বেস এবং ডেরাইভড ক্লাস ব্যবহার

using System;

namespace InheritanceExample
{
    // বেস ক্লাস
    public class Animal
    {
        public string Name;
        
        public void Eat()
        {
            Console.WriteLine(Name + " is eating...");
        }
    }

    // ডেরাইভড ক্লাস
    public class Dog : Animal
    {
        public void Bark()
        {
            Console.WriteLine(Name + " is barking...");
        }
    }

    public class Cat : Animal
    {
        public void Meow()
        {
            Console.WriteLine(Name + " is meowing...");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // Dog অবজেক্ট তৈরি এবং বৈশিষ্ট্য ব্যবহার
            Dog dog = new Dog();
            dog.Name = "Buddy";
            dog.Eat();    // Output: Buddy is eating...
            dog.Bark();   // Output: Buddy is barking...

            // Cat অবজেক্ট তৈরি এবং বৈশিষ্ট্য ব্যবহার
            Cat cat = new Cat();
            cat.Name = "Whiskers";
            cat.Eat();    // Output: Whiskers is eating...
            cat.Meow();   // Output: Whiskers is meowing...
        }
    }
}

আউটপুট

Buddy is eating...
Buddy is barking...
Whiskers is eating...
Whiskers is meowing...

বেস এবং ডেরাইভড ক্লাসের সুবিধা

  1. কোড পুনরায় ব্যবহারযোগ্যতা: ইনহেরিটেন্সের মাধ্যমে একবার বেস ক্লাস তৈরি করে, তার বৈশিষ্ট্য এবং মেথডগুলো বিভিন্ন ডেরাইভড ক্লাসে পুনরায় ব্যবহার করা যায়।
  2. কোডের সরলতা এবং গঠন: সাধারণ বৈশিষ্ট্যগুলো বেস ক্লাসে রেখে ডেরাইভড ক্লাসে নতুন বৈশিষ্ট্য যোগ করা যায়, যা কোডকে সুশৃঙ্খল এবং সহজ করে।
  3. কোডের রিডেবিলিটি: বেস এবং ডেরাইভড ক্লাসের মাধ্যমে ক্লাসের মধ্যে সম্পর্ক তৈরি হয়, যা কোডের রিডেবিলিটি বাড়ায়।

ওভাররাইডিং (Overriding)

ডেরাইভড ক্লাসে বেস ক্লাসের মেথড ওভাররাইড করার জন্য override কীওয়ার্ড ব্যবহার করা হয়। এজন্য বেস ক্লাসের মেথড virtual হিসেবে ঘোষণা করতে হয় এবং ডেরাইভড ক্লাসে ওভাররাইড করা হয়।

উদাহরণ: মেথড ওভাররাইডিং

public class Animal
{
    public virtual void MakeSound()
    {
        Console.WriteLine("Animal makes a sound");
    }
}

public class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Dog barks");
    }
}

এখানে Dog ক্লাসে MakeSound() মেথড ওভাররাইড করা হয়েছে।

উদাহরণ প্রোগ্রাম: ওভাররাইডিং সহ বেস এবং ডেরাইভড ক্লাস

class Program
{
    static void Main(string[] args)
    {
        Animal animal = new Animal();
        animal.MakeSound();  // Output: Animal makes a sound

        Dog dog = new Dog();
        dog.MakeSound();     // Output: Dog barks
    }
}

সারসংক্ষেপ

সি শার্পে বেস ক্লাস হলো মূল ক্লাস, যেখানে সাধারণ বৈশিষ্ট্য ও মেথড থাকে, এবং ডেরাইভড ক্লাস সেই বৈশিষ্ট্য ও মেথড উত্তরাধিকারী হিসেবে গ্রহণ করে। ইনহেরিটেন্সের মাধ্যমে কোড পুনরায় ব্যবহারযোগ্য হয় এবং সহজে সম্প্রসারণ করা যায়। ওভাররাইডিংয়ের মাধ্যমে ডেরাইভড ক্লাসে বেস ক্লাসের মেথড পুনঃসংজ্ঞায়িত করা যায়, যা পলিমরফিজম নিশ্চিত করে।

Content added By

মেথড ওভাররাইডিং এবং virtual কীওয়ার্ড

মেথড ওভাররাইডিং (Method Overriding) সি শার্প (C#) এ একটি প্রক্রিয়া, যা ইনহেরিটেন্সের ক্ষেত্রে ব্যবহার করা হয়। মেথড ওভাররাইডিংয়ের মাধ্যমে বেস ক্লাসের একটি মেথডকে ডেরাইভড ক্লাসে পুনরায় সংজ্ঞায়িত করা যায়। এটি তখনই সম্ভব হয় যখন বেস ক্লাসের মেথডটিকে virtual হিসেবে চিহ্নিত করা হয় এবং ডেরাইভড ক্লাসে সেই মেথডটিকে override কীওয়ার্ড দিয়ে ওভাররাইড করা হয়।

virtual কীওয়ার্ড

  • virtual কীওয়ার্ড ব্যবহার করে বেস ক্লাসের একটি মেথডকে ওভাররাইডযোগ্য হিসেবে চিহ্নিত করা হয়।
  • virtual মেথড ডেরাইভড ক্লাসে ওভাররাইড করার জন্য প্রস্তুত থাকে, অর্থাৎ ডেরাইভড ক্লাস ঐ মেথডটিকে তার নিজস্ব পদ্ধতিতে ইমপ্লিমেন্ট করতে পারে।

override কীওয়ার্ড

  • override কীওয়ার্ড ব্যবহার করে ডেরাইভড ক্লাসে বেস ক্লাসের virtual মেথডকে পুনরায় সংজ্ঞায়িত করা হয়।
  • এটি মূলত ডেরাইভড ক্লাসে আলাদা বা বিশেষ কিছু কার্য সম্পাদন করার জন্য মেথডকে নতুনভাবে ইমপ্লিমেন্ট করতে ব্যবহৃত হয়।

মেথড ওভাররাইডিং এর উদাহরণ

নিচে একটি উদাহরণ দেওয়া হলো, যেখানে Animal নামের একটি বেস ক্লাস এবং Dog নামের একটি ডেরাইভড ক্লাস তৈরি করা হয়েছে। Animal ক্লাসের Sound মেথডটি virtual হিসেবে চিহ্নিত করা হয়েছে এবং Dog ক্লাসে Sound মেথডটি ওভাররাইড করা হয়েছে।

using System;

// বেস ক্লাস
class Animal
{
    public virtual void Sound()
    {
        Console.WriteLine("Animals make sound");
    }
}

// ডেরাইভড ক্লাস
class Dog : Animal
{
    public override void Sound()
    {
        Console.WriteLine("Dogs bark");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Animal myAnimal = new Animal();
        myAnimal.Sound(); // Output: Animals make sound

        Dog myDog = new Dog();
        myDog.Sound(); // Output: Dogs bark

        // পলিমরফিজমের মাধ্যমে
        Animal animalDog = new Dog();
        animalDog.Sound(); // Output: Dogs bark (ওভাররাইডেড মেথড কল হবে)
    }
}

আউটপুট

Animals make sound
Dogs bark
Dogs bark

এখানে, Animal ক্লাসের Sound মেথডটি virtual হিসেবে ঘোষণা করা হয়েছে এবং Dog ক্লাসে Sound মেথডটিকে override করা হয়েছে। ফলে Animal টাইপের অবজেক্ট Dog ইনস্ট্যান্স হিসেবে ব্যবহার করলেও Dog এর ওভাররাইড করা মেথডটি কল হবে।

মেথড ওভাররাইডিং এর সুবিধা

  1. পলিমরফিজম (Polymorphism): মেথড ওভাররাইডিং পলিমরফিজমে সাহায্য করে, যার মাধ্যমে একই মেথড বেস এবং ডেরাইভড ক্লাসে আলাদা আচরণ করতে পারে।
  2. কোডের মডুলারাইজেশন: বেস ক্লাসে সাধারণ কাজগুলো রাখা যায় এবং ডেরাইভড ক্লাসে নির্দিষ্ট কাজ বা বৈশিষ্ট্য সংযুক্ত করা যায়।
  3. রক্ষণাবেক্ষণ সহজ: যদি কোনো পরিবর্তন দরকার হয়, তাহলে বেস ক্লাসে সাধারণ কার্যটি থেকে যায় এবং ডেরাইভড ক্লাসে ওভাররাইড করে নতুন কার্য সংযুক্ত করা যায়।

উদাহরণ: পলিমরফিজম এবং ওভাররাইডিং

নিচে Shape নামের একটি বেস ক্লাস এবং তার দুটি ডেরাইভড ক্লাস CircleRectangle তৈরি করা হয়েছে, যেখানে Draw মেথডটি বিভিন্নভাবে ওভাররাইড করা হয়েছে।

using System;

class Shape
{
    public virtual void Draw()
    {
        Console.WriteLine("Drawing a shape.");
    }
}

class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a circle.");
    }
}

class Rectangle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a rectangle.");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Shape myShape;

        myShape = new Shape();
        myShape.Draw(); // Output: Drawing a shape.

        myShape = new Circle();
        myShape.Draw(); // Output: Drawing a circle.

        myShape = new Rectangle();
        myShape.Draw(); // Output: Drawing a rectangle.
    }
}

আউটপুট

Drawing a shape.
Drawing a circle.
Drawing a rectangle.

এখানে Shape ক্লাসে Draw মেথডটি virtual হিসেবে ঘোষণা করা হয়েছে এবং CircleRectangle ক্লাসে এটি override করা হয়েছে। ফলে পলিমরফিজমের মাধ্যমে বিভিন্ন অবজেক্টে Draw মেথড ভিন্ন ভিন্ন আউটপুট প্রদর্শন করেছে।

সারসংক্ষেপ

  • মেথড ওভাররাইডিং C# এ বেস এবং ডেরাইভড ক্লাসে একই মেথড ভিন্ন ভিন্নভাবে ইমপ্লিমেন্ট করতে সহায়ক।
  • virtual কীওয়ার্ড ব্যবহার করে বেস ক্লাসে মেথডকে ওভাররাইডযোগ্য হিসেবে চিহ্নিত করা হয়।
  • override কীওয়ার্ড ব্যবহার করে ডেরাইভড ক্লাসে বেস ক্লাসের মেথডকে নতুনভাবে ইমপ্লিমেন্ট করা হয়।
  • মেথড ওভাররাইডিংয়ের মাধ্যমে পলিমরফিজমের সুবিধা পাওয়া যায় এবং প্রোগ্রামিংকে আরো মডুলার এবং সহজে রক্ষণাবেক্ষণযোগ্য করা যায়।
Content added By

পলিমরফিজম এবং abstract ক্লাস

পলিমরফিজম এবং abstract ক্লাস সি শার্প (C#) এর অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর গুরুত্বপূর্ণ বৈশিষ্ট্য। পলিমরফিজমের মাধ্যমে একাধিক রূপে একই কার্যাবলী প্রকাশ করা সম্ভব হয়, এবং abstract ক্লাস এমন একটি ভিত্তি প্রদান করে যার ওপর ভিত্তি করে নির্দিষ্ট বাস্তবায়ন গঠন করা যায়।

পলিমরফিজম (Polymorphism)

পলিমরফিজম হলো এমন একটি বৈশিষ্ট্য যা একই মেথড বা অপারেশনের বিভিন্ন রূপ প্রকাশ করতে দেয়। এটি মূলত দুটি ধরনের হতে পারে:

  1. স্ট্যাটিক পলিমরফিজম (Static Polymorphism) বা মেথড ওভারলোডিং (Method Overloading)
  2. ডায়নামিক পলিমরফিজম (Dynamic Polymorphism) বা মেথড ওভাররাইডিং (Method Overriding)

মেথড ওভারলোডিং (Method Overloading)

মেথড ওভারলোডিং হলো একই নামের মেথড একাধিকবার সংজ্ঞায়িত করা, যেখানে প্রতিটি মেথডের প্যারামিটার ভিন্ন হয়। এটি কম্পাইল টাইমে কাজ করে, তাই একে স্ট্যাটিক পলিমরফিজম বলা হয়।

public class MathOperations
{
    public int Add(int a, int b)
    {
        return a + b;
    }

    public double Add(double a, double b)
    {
        return a + b;
    }
}

মেথড ওভাররাইডিং (Method Overriding)

মেথড ওভাররাইডিং হলো বেস ক্লাসের virtual মেথডকে ডেরাইভড ক্লাসে override করে পুনরায় সংজ্ঞায়িত করা। এটি রানটাইমে কাজ করে, তাই একে ডায়নামিক পলিমরফিজমও বলা হয়।

public class Animal
{
    public virtual void MakeSound()
    {
        Console.WriteLine("Animal makes a sound");
    }
}

public class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Dog barks");
    }
}

উদাহরণ: পলিমরফিজম

class Program
{
    static void Main(string[] args)
    {
        Animal animal = new Animal();
        animal.MakeSound(); // Output: Animal makes a sound

        Animal dog = new Dog();
        dog.MakeSound();    // Output: Dog barks
    }
}

Abstract ক্লাস (Abstract Class)

Abstract ক্লাস হলো এমন একটি ক্লাস যেটি আংশিক বাস্তবায়ন প্রদান করে এবং পুরোপুরি ইনস্ট্যান্টিয়েট করা যায় না। অর্থাৎ, abstract ক্লাস থেকে সরাসরি কোনো অবজেক্ট তৈরি করা যায় না। abstract ক্লাসে এমন কিছু মেথড থাকতে পারে যেগুলোর বাস্তবায়ন নির্ধারণ করা হয় না। ডেরাইভড ক্লাসে সেই মেথডগুলোকে override করে বাস্তবায়ন করতে হয়।

Abstract ক্লাসের গঠন

public abstract class Shape
{
    public abstract double GetArea(); // Abstract method
}

উদাহরণ: Abstract ক্লাস এবং পলিমরফিজম

public abstract class Shape
{
    // Abstract method, ডেরাইভড ক্লাসে ওভাররাইড করতে হবে
    public abstract double GetArea();

    // Non-abstract method
    public void DisplayShapeType()
    {
        Console.WriteLine("This is a shape.");
    }
}

public class Circle : Shape
{
    private double radius;

    public Circle(double radius)
    {
        this.radius = radius;
    }

    // Overriding the abstract method
    public override double GetArea()
    {
        return Math.PI * radius * radius;
    }
}

public class Rectangle : Shape
{
    private double width;
    private double height;

    public Rectangle(double width, double height)
    {
        this.width = width;
        this.height = height;
    }

    // Overriding the abstract method
    public override double GetArea()
    {
        return width * height;
    }
}

উদাহরণ প্রোগ্রাম: Abstract ক্লাস ব্যবহার

class Program
{
    static void Main(string[] args)
    {
        Shape circle = new Circle(5.0);
        Shape rectangle = new Rectangle(4.0, 6.0);

        Console.WriteLine("Circle Area: " + circle.GetArea());      // Output: Circle Area: 78.5398
        Console.WriteLine("Rectangle Area: " + rectangle.GetArea()); // Output: Rectangle Area: 24
    }
}

Abstract ক্লাস এবং পলিমরফিজমের বৈশিষ্ট্য

  1. Abstract মেথড: Abstract ক্লাসের মধ্যে থাকা abstract মেথড ডেরাইভড ক্লাসে override করতে হয়।
  2. Non-abstract মেথড: Abstract ক্লাসে এমন কিছু মেথড থাকতে পারে যেগুলো সম্পূর্ণ সংজ্ঞায়িত।
  3. অবজেক্ট তৈরি করা যায় না: Abstract ক্লাস থেকে সরাসরি কোনো অবজেক্ট তৈরি করা যায় না।
  4. পলিমরফিজম: Abstract ক্লাস পলিমরফিজমকে সমর্থন করে, কারণ ডেরাইভড ক্লাসগুলো বেস ক্লাসের abstract মেথডগুলোকে আলাদাভাবে বাস্তবায়ন করে।

Abstract ক্লাস বনাম ইন্টারফেস

বৈশিষ্ট্যAbstract ক্লাসইন্টারফেস
ইনস্ট্যান্টিয়েট করাসরাসরি ইনস্ট্যান্টিয়েট করা যায় নাসরাসরি ইনস্ট্যান্টিয়েট করা যায় না
মেম্বার সংজ্ঞায়িতAbstract এবং non-abstract মেথড থাকতে পারেশুধুমাত্র Abstract মেথড থাকতে পারে
মাল্টিপল ইনহেরিটেন্সএকাধিক Abstract ক্লাস থেকে ইনহেরিট করা যায় নাএকাধিক ইন্টারফেস থেকে ইনহেরিট করা যায়
অ্যাক্সেস মডিফায়ারবিভিন্ন অ্যাক্সেস মডিফায়ার থাকতে পারেমেথড সব সময় public থাকে

সারসংক্ষেপ

পলিমরফিজম সি শার্পে বিভিন্ন পরিস্থিতিতে একই ফাংশনালিটির বিভিন্ন রূপ প্রকাশ করতে দেয়, যা কোডের কার্যকারিতা বৃদ্ধি করে। Abstract ক্লাস এমন একটি ক্লাস যা আংশিক বাস্তবায়ন প্রদান করে এবং নির্দিষ্ট মেথডগুলোর জন্য ডেরাইভড ক্লাসে বাস্তবায়ন নিশ্চিত করে। Abstract ক্লাস এবং পলিমরফিজম একসঙ্গে ব্যবহার করে কোডের পুনরায় ব্যবহারযোগ্যতা ও গঠন উন্নত করা যায়।

Content added By
Promotion